<?php
/**
 * 文件名：qqwb.mod.php
 * 版本号：1.0
 * 最后修改时间：2011年3月3日
 * 作者：
 * 功能描述: QQ微博接口模块
 */


if(!defined('IN_JISHIGOU'))
{
    exit('invalid request');
}

class ModuleObject extends MasterObject
{
    
    var $appid = 100445814;
    var $appkey = "371da6c42caf03dfcaca3e4d11481214";
    var $scope = 'all';
    var $callback = 'index.php?mod=qq';

	function ModuleObject($config)
	{
		$this->MasterObject($config);
		$this->Execute();
	}

	
	function Execute()
	{
		ob_start();
		switch ($this->Code)
        {                
            case 'login':
                $this->Login();
                break;
            case 'doreg':
            	$this->DoReg();
			default:
				$this->Main();
		}
		$body=ob_get_clean();

		$this->ShowBody($body);
	}

	function Main()
	{
		$this->Title = "QQ登录";
		$this->AuthCallback();
    }
    
    function Login()
    {
    	$state = md5($this->appkey);
   		$login_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" 
        . $this->appid . "&redirect_uri=" . urlencode($this->callback)
        . "&state=".$state
        . "&scope=".$this->scope;
        header("Location:$login_url");
    }
    
    function AuthCallback()
	{
		$state = md5($this->appkey);
		if($_REQUEST['state'] == $state)
		{
			$token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"
				. "client_id=" . $this->appid. "&redirect_uri=" . urlencode($this->callback)
				. "&client_secret=" . $this->appkey. "&code=" . $_REQUEST["code"];
			$response = $this->get_url_contents($token_url);
		    if (strpos($response, "callback") !== false)
			{
				$lpos = strpos($response, "(");
				$rpos = strrpos($response, ")");
		        $response  = substr($response, $lpos + 1, $rpos - $lpos -1);
		        $msg = json_decode($response);
		        if (isset($msg->error))
		        {
					$this->Messager("授权失败，请重新尝试",null);
		        }
		    }
		
		    $params = array();
		    parse_str($response, $params);
		    
		    $params['openid'] = $this->get_openid($params["access_token"]);
			
			//先对QQ信息绑定情况进行判断  如果已经绑定，则直接使用绑定账户登录，如果没有绑定（先判断是否处于登录状态，如果是直接对该账户进行绑定；如果不是，进入注册页面）
		    $qq_bind_info = $this->DatabaseHandler->FetchFirst("select * from ".TABLE_PREFIX."qq_bind_info where `openid`='{$params['openid']}'");

		    if($qq_bind_info)
		    {
		        if($qq_bind_info['access_token']!=$params['access_token'])
		        {
		            $this->DatabaseHandler->Query("update ".TABLE_PREFIX."qq_bind_info set `access_token`='{$params['access_token']}',`dateline`='".time()."' where `openid`='{$params['openid']}'");
		        }
		        //登录
		        if(false != ($user_info = $this->_user_login($qq_bind_info['uid'])))
		        {
		                if(true === UCENTER && ($ucuid = (int) $user_info['ucuid']) > 0)
		                {
		                    include_once(ROOT_PATH . 'uc_client/client.php');
		                    
		                    $uc_syn_html = uc_user_synlogin($ucuid);
		                    
		                    $this->Messager("登录成功，正在为您跳转到首页。{$uc_syn_html}",'?',5);
		                }
		                
		                $this->Messager(null,'?');
		        }
		        else
		        {
		                $this->DatabaseHandler->Query("delete from ".TABLE_PREFIX."qq_bind_info where `uid`='{$qq_bind_info['uid']}'");
		                
		                $this->Messager("绑定的用户已经不存在了",'?');
		        }
		    }
		    else
		    {
		    	
		        if(MEMBER_ID > 0)
		        {		
		        		//绑定
		                $this->DatabaseHandler->Query("insert into ".TABLE_PREFIX."qq_bind_info (`uid`,`qq_username`,`access_token`,`openid`,`dateline`) values ('".MEMBER_ID."','".MEMBER_NAME."','{$params['access_token']}','{$params['openid']}','".time()."')");
		                $this->Messager(null,'index.php');
		        }
		        else
		        {
		        		//注册
		        		$qq_user_info = $this->get_user_info($params);
		        		if($qq_user_info){
		        			$reg = array();
		        			$reg['username'] = $this->Pinyin($qq_user_info['nickname']);
		        			$reg['nickname'] = $qq_user_info['nickname'];
		        			$reg['face'] = $qq_user_info['figureurl_2'];
		        			$reg['gender'] = $qq_user_info['gender']=='男'?'1':'2';
		        			
		        			$action = "index.php?mod=qqlogin&code=doreg";
							$this->Title = "QQ登录";
							include($this->TemplateHandler->Template('qqlogin'));
		        			
		        		}else{
		        			$this->Messager("获取用户信息失败，请重新尝试",null);
		        		}

		        }
		     }
		    
		    
		}else{
			$this->Messager("错误的请求，请重新尝试",null);
		}
	}
    
    function RegCheck()
    {
        exit($this->_reg_check());
    }
    function _reg_check()
    {
        $in_ajax = $this->Request['in_ajax'];
        if($in_ajax)
        {
            $this->Post = array_iconv('utf-8',$this->Config['charset'],$this->Post);
        }
        
        $username = trim($this->Post['username']);
        $nickname = trim($this->Post['nickname']);
        $email = trim($this->Post['email']);
        
        Load::functions('member');
        
        $rets = array(
        	'0' => '未知错误',
        	'-1' => '不合法',
        	'-2' => '不允许注册',
        	'-3' => '已经存在了',
        	'-4' => '不合法',
        	'-5' => '不允许注册',
        	'-6' => '已经存在了',
        );
        
        $ret = jsg_member_checkname($username);        
        if($ret < 1)
        {
        	return "用户名 " . $rets[$ret];
        }
        
        $ret = jsg_member_checkname($nickname, 1);
        if($ret < 1)
        {
        	return "昵称 " . $rets[$ret];
        }
        
        $ret = jsg_member_checkemail($email);
        if($ret < 1)
        {
        	return "Email " . $rets[$ret];
        }
        
        return '';
    }    
    function DoReg()
    {
        if(false != ($check_result = $this->_reg_check()))
        {
            $this->Messager($check_result,null);
        }
        
        $username = trim($this->Post['username']);
        $nickname = trim($this->Post['nickname']);
        $password = trim($this->Post['password']);
        $email = trim($this->Post['email']);
		$location = $this->Post['location'];
		$gender =  intval($this->Post['gender']);
		$face_url = $this->Post['face'];
        Load::functions('member');
        
        $ret = jsg_member_register($username, $password, $email, $nickname);
		
        if($ret < 1)
        {
        	$this->Messager("注册失败{$ret}",null);
        }
        
        if($face_url){
        	$this->qq_face($ret);
        }
        $qq_sql = "update `". TABLE_PREFIX. "members` set gender = ".$gender." where uid = ".$ret;
		$this->DatabaseHandler->Query($qq_sql);
		
        $rets = jsg_member_login($username, $password);
        if($rets['uid']){
        	$this->DatabaseHandler->Query("insert into ".TABLE_PREFIX."qq_bind_info (`uid`,`qq_username`,`access_token`,`openid`,`dateline`) values ('{$rets['uid']}','{$rets['username']}','{$this->Post['access_token']}','{$this->Post['openid']}','".time()."')");
        }
        
        if($rets['uc_syn_html'])
        {
                $this->Messager("注册成功，现在为您转入到首页{$rets['uc_syn_html']}",'?');
        }
        else
        {
                $this->Messager(null,'?');
        }
    }
    
//    function LoginCheck()
//    {
//        exit($this->_login_check());
//    }
//    function _login_check()
//    {   
//        $in_ajax = $this->Request['in_ajax'];
//        if($in_ajax)
//        {
//            $this->Post = array_iconv('utf-8',$this->Config['charset'],$this->Post);
//        }
//        
//        $username = trim($this->Post['username']);
//        $password = trim($this->Post['password']);
//        
//        Load::functions('member');
//        $rets = jsg_member_login_check($username, $password);
//		$ret = $rets['uid'];
//        if($ret < 1)
//        {
//        	$rets = array(
//        		'0' => '未知错误 ',
//        		'-1' => '用户名或者密码错误',
//        		'-2' => '用户名或者密码错误',
//        		'-3' => '累计 5 次错误尝试，15 分钟内您将不能登录',
//        	);
//        	
//        	return $rets[$ret];
//        }
//        
//        $this->UserInfo = $this->DatabaseHandler->FetchFirst("select * from ".TABLE_PREFIX."members where `username`='{$username}'");
//        
//        return '';
//    }
//    function DoLogin()
//    {
//        if(false != ($check_result = $this->_login_check()))
//        {
//            $this->Messager($check_result,null);
//        }
//        
//        $timestamp = time();
//        $username = trim($this->Post['username']);
//        $password = trim($this->Post['password']);
//        
//        Load::functions('member');
//        $rets = jsg_member_login($username, $password);             
//        
//        $qq_username = $this->Post['qq_username'];
//        if($qq_username)
//        {
//        	$this->DatabaseHandler->Query("insert into ".TABLE_PREFIX."qq_bind_info (`uid`,`qq_username`,`access_token`,`openid`,`dateline`) values ('".MEMBER_ID."','".MEMBER_NAME."','{$params['access_token']}','{$params['openid']}','".time()."')");
//        }
//        
//    	if($rets['uc_syn_html'])
//        {            
//            $this->Messager("登录成功，现在为您转入到首页{$rets['uc_syn_html']}","?",5);
//        }
//        else
//        {
//        	$this->Messager(null,'?');
//        }
//    }
    /**
     * 设置用户登录状态
     * @param int $uid
     */
    function _user_login($uid)
    {
    	Load::functions('member');
    	
    	return jsg_member_login_set_status($uid);
    }
	/**
	 * QQ登录用户头像处理
	 * @param int $uid 用户uid
	 * @return null
	 */
    function qq_face($uid)
    {		
        	$return = '';
            $uid = (is_numeric($uid) ? $uid : 0);
            if($uid < 1)
            {
                $uid = MEMBER_ID;
            } 
            if($uid < 1)
            {
                return ;
            }
            $user_info = $this->DatabaseHandler->FetchFirst("select * from ".TABLE_PREFIX."members where `uid`='$uid'");
            if(!$user_info || $user_info['face'])
            {
                return ;
            }
			
            $src_x = $src_y = $src_w = $src_h = 0;
            $face = ($face ? $face : ($this->Post['face'] ? $this->Post['face'] : $this->Get['face']));
            if(!$face || false === strpos($face,':/'.'/'))
            {
                return;
            }
            $src_file = ROOT_PATH . 'cache/misc/'.md5($face).'.jpg';
    
            
            Load::lib('io');
            $IoHandler = new IoHandler();
            if(false != ($image_data = $this->get_image_datas($face)))
            {
                $IoHandler->WriteFile($src_file,$image_data);
            } 

            if(!is_image($src_file))
            {
                $IoHandler->DeleteFile($src_file);
                return;
            }
            
            $image_path = RELATIVE_ROOT_PATH . 'images/face/' . face_path($uid);
            if(!is_dir($image_path))
            {
                $IoHandler->MakeDir($image_path);
            }

            $image_file = $dst_file = $image_path . $uid . '_b.jpg';
            $make_result = makethumb($src_file,$dst_file,128,128,0,0,$src_x,$src_y,$src_w,$src_h);

            $image_file_small = $dst_file = $image_path . $uid . '_s.jpg';
            $make_result = makethumb($src_file,$dst_file,50,50,0,0,$src_x,$src_y,$src_w,$src_h);
 
            $face_url = '';
            if($this->Config['ftp_enable'])
            {
                $face_url = ConfigHandler::get('ftp','attachurl');
                
                $ftp_result = ftpcmd('upload',$image_file);
                if($ftp_result > 0)
                {
                    ftpcmd('upload',$image_file_small);
                    
                    $IoHandler->DeleteFile($image_file);
                    $IoHandler->DeleteFile($image_file_small);
                }
            }
            
            $sql = "update `".TABLE_PREFIX."members` set `face_url`='$face_url',`face`='{$dst_file}' where `uid`='".$uid."'";
    		$this->DatabaseHandler->Query($sql);
            $IoHandler->DeleteFile($src_file);
    
            if($this->Config['extcredits_enable'] && $uid > 0)
    		{
    			
    			update_credits_by_action('face',$uid);
    		}
        
        return $return;
    }
    /**
     * 公用函数
     */
    function do_post($url, $data)
	{
	    $ch = curl_init();
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
	    curl_setopt($ch, CURLOPT_POST, TRUE); 
	    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
	    curl_setopt($ch, CURLOPT_URL, $url);
	    $ret = curl_exec($ch);
	
	    curl_close($ch);
	    return $ret;
	}
	/**
	 * 公用函数  获取url内容
	 */
	function get_url_contents($url)
	{
		$result = '';
	    if (ini_get("allow_url_fopen") == "1")
	        return file_get_contents($url);
	    
	    if(function_exists('curl_init'))
		{
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL,$url);
			curl_setopt($ch, CURLOPT_TIMEOUT,30);
			curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
			curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			$result = curl_exec($ch);
			curl_close($ch);
		}
	
	    return $result;
	}
	/**
	 * 获取头像数据
	 */
	function get_image_datas($img_url){
		$result = '';
		if(function_exists('curl_init'))
		{
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL,$img_url);
			curl_setopt($ch, CURLOPT_TIMEOUT,30);
			curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
			curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			$result = curl_exec($ch);
			curl_close($ch);
		}
		return $result;
	}
	/**
	 * 获取用户登录后的openid
	 * @param string $access_token
	 * @return string 登录后用户的openid
	 */
	function get_openid($access_token){
		$graph_url = "https://graph.qq.com/oauth2.0/me?access_token=" 
        . $access_token;

	    $str  = $this->get_url_contents($graph_url);
	    if (strpos($str, "callback") !== false)
	    {
	        $lpos = strpos($str, "(");
	        $rpos = strrpos($str, ")");
	        $str  = substr($str, $lpos + 1, $rpos - $lpos -1);
	    }
	
	    $user = json_decode($str);
	    if (isset($user->error))
	    {
//	        echo "<h3>error:</h3>" . $user->error;
//	        echo "<h3>msg  :</h3>" . $user->error_description;
//	        exit;
			$this->Messager("授权失败，请重新尝试",null);
	    }
	
	    return $user->openid;
	}
	
	/**
	 * 获取用户空间个人信息
	 * @param array() $params
	 * @return json 用户个人信息json
	 */
	 function get_user_info($params){
	 	$get_user_info = "https://graph.qq.com/user/get_user_info?"
		. "access_token=" . $params['access_token']
		. "&oauth_consumer_key=" . $this->appid
		. "&openid=" . $params["openid"]
		. "&format=json";
		$info = $this->get_url_contents($get_user_info);
		$arr = json_decode($info, true);
		return $arr;
	 }
	 
	/**
	 * 中文转拼音字典
	 */	  
	 function Pinyin($_String, $_Code='UTF8'){
        $_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha". 
                        "|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|". 
                        "cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er". 
                        "|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui". 
                        "|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang". 
                        "|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang". 
                        "|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue". 
                        "|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne". 
                        "|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen". 
                        "|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang". 
                        "|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|". 
                        "she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|". 
                        "tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu". 
                        "|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you". 
                        "|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|". 
                        "zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo"; 
        $_DataValue = "-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990". 
                        "|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725". 
                        "|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263". 
                        "|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003". 
                        "|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697". 
                        "|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211". 
                        "|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922". 
                        "|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468". 
                        "|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664". 
                        "|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407". 
                        "|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959". 
                        "|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652". 
                        "|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369". 
                        "|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128". 
                        "|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914". 
                        "|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645". 
                        "|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149". 
                        "|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087". 
                        "|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658". 
                        "|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340". 
                        "|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888". 
                        "|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585". 
                        "|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847". 
                        "|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055". 
                        "|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780". 
                        "|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274". 
                        "|-10270|-10262|-10260|-10256|-10254"; 
        $_TDataKey   = explode('|', $_DataKey); 
        $_TDataValue = explode('|', $_DataValue);
        $_Data = array_combine($_TDataKey, $_TDataValue);
        arsort($_Data); 
        reset($_Data);
        if($_Code!= 'gb2312') $_String = $this->_U2_Utf8_Gb($_String); 
        $_Res = ''; 
        for($i=0; $i<strlen($_String); $i++) { 
                $_P = ord(substr($_String, $i, 1)); 
                if($_P>160) { 
                        $_Q = ord(substr($_String, ++$i, 1)); $_P = $_P*256 + $_Q - 65536;
                } 
                $_Res .= $this->_Pinyin($_P, $_Data); 
        } 
        return preg_replace("/[^a-z0-9]*/", '', $_Res); 
	}
	/**
	 * 中文转拼音
	 */
	function _Pinyin($_Num, $_Data){ 
        if($_Num>0 && $_Num<160 ){
                return chr($_Num);
        }elseif($_Num<-20319 || $_Num>-10247){
                return '';
        }else{ 
                foreach($_Data as $k=>$v){ if($v<=$_Num) break; } 
                return $k; 
        } 
	}	
	/**
	 * UTF-8 转GB2312
	 */
	function _U2_Utf8_Gb($_C){ 
        $_String = ''; 
        if($_C < 0x80){
                $_String .= $_C;
        }elseif($_C < 0x800) { 
                $_String .= chr(0xC0 | $_C>>6); 
                $_String .= chr(0x80 | $_C & 0x3F); 
        }elseif($_C < 0x10000){ 
                $_String .= chr(0xE0 | $_C>>12); 
                $_String .= chr(0x80 | $_C>>6 & 0x3F); 
                $_String .= chr(0x80 | $_C & 0x3F); 
        }elseif($_C < 0x200000) { 
                $_String .= chr(0xF0 | $_C>>18); 
                $_String .= chr(0x80 | $_C>>12 & 0x3F); 
                $_String .= chr(0x80 | $_C>>6 & 0x3F); 
                $_String .= chr(0x80 | $_C & 0x3F); 
        } 
        return iconv('UTF-8', 'GB2312', $_String); 
	}
	
	
}


?>
